import MD5 from '../data/MD5.js';
import toJson from '../data/toJson.js';

/**
 * 生成签名【同步方法】
 * @description 生成签名，接口数据加密信息
 * @param {String,Object} data 要组合签名的数据
 * @param {String} salt 加密盐值(已经设置好默认值，可不填)
 * @return {Object} 封装后的成品数据
 */
function sign(data = {}, salt = 'focusUIProgram') {
	
	// 初始化返回数据为false
	var data_return = false;
	
	// 将data参数转换为json格式
	var json_data = toJson(data);
	// 转换成功执行
	if (json_data)
	{
		// 传递的data参数添加时间戳
		json_data['timestamp'] = new Date().getTime();
		
		// 初始化 数据中间载体 为数组
		var arr_result = new Array();
		// 循环data参数的子级元素
		for (var k in json_data) 
		{
			// 节点 - data参数元素
			var ele_value = json_data[k];
			// 元素数据格式 = object
			if (typeof(ele_value)=="object")
			{
				// 将其转化为string
				try { ele_value = JSON.stringify(ele_value); }
				catch (e) {}
			}
			// 组合的字符串 = k + ele
			var str_ele = k + ele_value;
			// 将组合的字符串 加入临时数组
			arr_result.push(str_ele);
		}
		// 数组自动排序
		arr_result.sort();
		
		// 生成sign的原始数据
		var str_sign_old = arr_result.join('FOCUSUI') + "FOCUSUI" + salt;
		// 生成MD5数据
		var str_sign_md5 = MD5(str_sign_old, 'capital');
		
		// 将加密后的sign 添加到 json化后的data
		json_data['sign'] = str_sign_md5;
		// 结果数据 赋值
		data_return = json_data;
	}
	
	// 返回结果数据
	return data_return;
}

export default sign;